#externally defined path and variables
CC=g++
OPENGL_INCLUDE_PATH=/usr/X11/include
OPENGL_LIBRARY_PATH=/usr/X11/lib
OPENGL_LIBRARY=glut GLU GL Xmu Xext Xi X11 m
CFLAGS=-O2 -Wall

#derived parameters
SVN_VERS:=$(shell svnversion 2>/dev/null)
MACROS=$(addprefix -D,SVN_VERS=\"$(SVN_VERS))\"
LIBRARY=$(OPENGL_LIBRARY)
INCLUDE_PATH=$(OPENGL_INCLUDE_PATH)
LIBRARY_PATH=$(OPENGL_LIBRARY_PATH)

####################################################### files ###################################################

src_files=src/opengl
proj_files=proj/gas

###################################################### targets ##################################################

all: proj_targets pieces_targets

pieces_targets: $(addsuffix .o,$(src_files))
proj_targets: $(proj_files) pieces_targets 

clean:
	 rm -rf $(addsuffix .o,$(src_files)) $(proj_files)

############################################# rules to produce objects ##########################################

$(addsuffix .o,$(src_files)): %.o: %.cpp
	$(CC)				\
	$(addprefix -I,$(INCLUDE_PATH)) \
	$<				\
	$(CFLAGS) 			\
	$(MACROS) 			\
	-c -o $@

$(proj_files): $(addsuffix .cpp, $@) Makefile
	$(CC)                           \
	$(addprefix -I,$(INCLUDE_PATH)) \
	$(addprefix -L,$(LIBRARY_PATH)) \
	$(CFLAGS)                       \
	$(MACROS)                       \
	-o $@                           \
	$(addsuffix .o,$(src_files))	\
	$(addprefix -l,$(LIBRARY))	\
	$(addsuffix .cpp, $@)

############################################ phonyfyse the needed target #######################################

.PHONY: clean
